/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import entities.Usuario;
import facades.UsuarioFacade;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.enterprise.inject.Produces;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import qualifiers.UsuarioLogeado;

/**
 *
 * @author damfercer
 */
@Named
@SessionScoped
public class LoginBean implements Serializable {
    private String nombreUsuario;
    private String password;
    private Usuario usuarioSeleccionado;
    @Inject
    private UsuarioFacade usuarioFacade;
    /**
     * Creates a new instance of LoginBean
     */
    public LoginBean() {
    }
    
    public String login(){
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
        Locale locale=context.getViewRoot().getLocale();
        ResourceBundle rb = ResourceBundle.getBundle("messages", locale);
        /*try {
            request.login(nombreUsuario, password);
        } 
        catch (ServletException e) {
            String loginError=rb.getString("LogInError");
            FacesMessage msg =new FacesMessage(loginError,loginError);
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
            context.renderResponse();
            return "error";
        } */  
        usuarioSeleccionado=usuarioFacade.getUsuarioDeUserYPassword(nombreUsuario, password);
        if(usuarioSeleccionado==null){
            String loginError=rb.getString("LogInError");
            FacesMessage msg =new FacesMessage(loginError,loginError);
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
            context.renderResponse();
        }
        else{
            Date ahora=new Date();
            usuarioSeleccionado.setFechaUltimaEntrada(ahora);
            usuarioFacade.edit(usuarioSeleccionado);
            StringBuilder sb=new StringBuilder();
            sb.append("/views/");
            sb.append(usuarioSeleccionado.getTipoUsuario().getDescripcion().toLowerCase());
            sb.append("/");
            sb.append("index?faces-redirect=true");
            return sb.toString();
        }
        return null;
    }
    
    public void invalidateSession(){
        HttpSession session=(HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        session.invalidate();
    }
    
    public String logout(){
        invalidateSession();
        return "/index?faces-redirect=true";
    }

    /**
     * @return the nombreUsuario
     */
    public String getNombreUsuario() {
        return nombreUsuario;
    }

    /**
     * @param nombreUsuario the nombreUsuario to set
     */
    public void setNombreUsuario(String nombreUsuario) {
        this.nombreUsuario = nombreUsuario;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @return the usuarioSeleccionado
     */
    public @Produces @UsuarioLogeado Usuario getUsuarioSeleccionado() {
        return usuarioSeleccionado;
    }

    /**
     * @param usuarioSeleccionado the usuarioSeleccionado to set
     */
    public void setUsuarioSeleccionado(Usuario usuarioSeleccionado) {
        this.usuarioSeleccionado = usuarioSeleccionado;
    }
}
